// pages/cart/index.js

import { chooseAddress,getSetting,openSetting,showModal,showToast } from "../../utils/asyncWx.js"
import regeneratorRuntime from '../../lib/runtime/runtime'

Page({
  data: {
      address: {},
      cart:[],
      allChecked:false,
      totalPrice:0,
      totalNum:0
    },
  onLoad: function (options) {

    },
  onShow(){
    //1 获取缓存中的收货地址信息
    const address = wx.getStorageSync("address");

    //获取缓存中的购物车数据
    const cart = wx.getStorageSync("cart") || [];

    /* //计算全选
    //const allChecked = cart.length ? cart.every(v => v.checked) : false
    let allChecked = true
 
    //总价格和总数量
    let totalPrice = 0
    let totalNum = 0
    cart.forEach(v =>{
      if(v.checked){
        totalPrice += v.num * v.goods_price
        totalNum += v.num
      }else{
        allChecked = false
      }
    })

    //cart为空数组时
    allChecked = cart.length !=0 ? allChecked : false

    //2 给data赋值
    this.setData({
      address,
      cart,
      allChecked,
      totalPrice,
      totalNum
    }) */
	
  this.setData({address})
	this.setCart(cart)
	
  },
	//优化 3
	//点击 收获地址 按钮
	async handleChooseAddress(){

		try{
      //1 获取权限状态
      const res1 = await getSetting()
      const scopeAddress = res1.authSetting["scope.address"]
        
      //2 判断权限状态
      if(scopeAddress===false){
        
        //3 先诱导用户打开授权页面
        await openSetting()
      }
      
      //4 调用获取收货地址的api
      let res2 = await chooseAddress()
      console.log(res2)

      //完整地址的拼接
      res2.all = res2.provinceName+res2.cityName+res2.countyName+res2.detailInfo

      //5 存入到缓存中
      wx.setStorageSync("address", res2);

    }catch(error){
      console.log(error)
    }
	},
  //点击 复选框
  handleItemChange(e){

    //1 获取商品id
    const goods_id = e.currentTarget.dataset.id
    //console.log(goods_id)

    //2 获取购物车数组
    const {cart} = this.data

    //3 找到 当前选中或者取消选中的商品 的 索引
    let index = cart.findIndex(v => v.goods_id===goods_id)

    //4 选中状态取反    
    cart[index].checked = !cart[index].checked

    // 5 把购物车数据 重新设置回 data中 和 缓存中
    this.setCart(cart)
    

  },
  //封装一个函数
  //设置购物车状态 同时重新计算底部工具栏的数据 全选、总价格、购买的数量
  setCart(cart){
    //1 计算全选、总价格、总数量
    //计算全选
    //const allChecked = cart.length ? cart.every(v => v.checked) : false
    let allChecked = true
     
    //总价格和总数量
    let totalPrice = 0
    let totalNum = 0
    cart.forEach(v =>{
      if(v.checked){
        totalPrice += v.num * v.goods_price
        totalNum += v.num
      }else{
        allChecked = false
      }
    })
    
    //cart为空数组时
    allChecked = cart.length !=0 ? allChecked : false
    
	//2 将购物车数组 存储到 缓存中
	wx.setStorageSync("cart", cart);
	
    //3 将数据保存到 data中
    this.setData({
      cart,
      allChecked,
      totalPrice,
      totalNum
    })

  },
  //点击 全选按钮
  handleItemAllCheck(){
    //1 获取data中的购物车状态数据
    let {cart, allChecked} = this.data

    //2 修改值
    allChecked = !allChecked

    //3 循环修改cart数组中的商品选中状态
    cart.forEach(v => v.checked = allChecked)

    //4 更新缓存 和 data 中的数据
    this.setCart(cart)
  },
  //编辑 商品的购买数量
  async handleItemNumEdit(e){

    //1 取出传递过来的参数
    const {operation, id} = e.currentTarget.dataset
	  //console.log(operation, id)	

    //2 获取购物车数组
    let {cart} = this.data
     
    //3 找到需要修改购买数量的商品的 索引
    const index = cart.findIndex(v => v.goods_id === id)

    //判断是否要删除 当前正在编辑的商品
    if(cart[index].num === 1 && operation === -1){

      //弹框 提示是否删除
      /* wx.showModal({
        title: '提示',
        content: '是否删除？',
        success: (res) => {
          if (res.confirm) {
            cart.splice(index, 1)
            this.setCart(cart)
          } else if (res.cancel) {
            console.log('用户点击取消')
          }
        }
      }) */
	  
      //优化后的代码

      //弹框 提示是否删除
      const res = await showModal({content:"是否删除？"})

      //点击确认按钮 则真正执行删除
      if (res.confirm) {
        cart.splice(index, 1)
      }

    }else{
      //4 直接修改购买数量
      cart[index].num += operation
    }

    //5 设置回缓存中 和 data中
    this.setCart(cart)
  },

  //点击 结算按钮
  async handlePay(){
    const {address, totalNum} = this.data

    //1 判断收货地址
    if(!address.userName){
      await showToast({title: '您还没有选择收货地址！'})
      return
    }

    //2 判断是否已经选中商品
    if(totalNum === 0){
      await showToast({title: '您还没有选购商品！'})
      return
    }

    //3 跳转到 支付页面
    wx.navigateTo({
      url: '/pages/pay/index'
    });

  }
	
})
